public class Work02 {
    private static int count = 0;

    //手写全排列 剪枝问题处理
    public static void main(String[] args) {
        //用1-13这些数字填到加减乘除四则运算当中 不能有重复
        int[] nums = {1,2,3,4,5,6,7,8,9,10,11,12,13};
        boolean[] isUsed = new boolean[13];//记录这些数字有没有使用过
        int[] res = new int[13];//记录一次全排列的结果

        dfs(0,13,isUsed,res,nums);
        System.out.println(count);
    }


    private static void dfs(int start,int end,boolean[] isUsed,int[] res,int[] nums){
        if(start >= 3 && res[0] + res[1] != res[2])  return;
        if(start >= 6 && res[3] - res[4] != res[5])  return;
        if(start >= 9 && res[6] * res[7] != res[8])  return;
        if(start == end){
           if (res[9] == res[10] * res[11]) {
               count++;
               return;
           }
        }
        for (int i = 0; i < end; i++) {
            if(isUsed[i] == false){
                res[start] = nums[i];
                isUsed[i] = true;
                dfs(start+1,end,isUsed,res,nums);
                isUsed[i] = false;
            }
        }
    }
}
